﻿// var isOnload=sessionStorage.getItem("isIndexedDBOnload");
// //保证以下的代码只加载一次
// if(isOnload==1){
//     console.log("数据库已经加载过一遍")
// }
// else{
window.content = "";
// 使用的数据库名称
window.dbName = 'bxxs';
// 版本
window.version = 1;
window.db = null;
// 打开数据库
DBOpenRequest = window.indexedDB.open(dbName, version);

//数据库首次创建版本，或者window.indexedDB.open传递的新版本（版本数值要比现在的高）
DBOpenRequest.onupgradeneeded = function (event) {
    db = event.target.result;

    db.onerror = function (event) {
        logError('数据库打开失败');
    };

    // 创建一个数据库存储对象(主键是id，并设置为自动增长)
    var objectStore = db.createObjectStore(dbName, {
        keyPath: 'id',
        autoIncrement: false
    });

    // 定义存储对象的数据项
    objectStore.createIndex('id', 'id', {
        unique: true
    });
    // objectStore.createIndex('name', 'name');
    // objectStore.createIndex('begin', 'begin');
    // objectStore.createIndex('end', 'end');
    // objectStore.createIndex('person', 'person');
    // objectStore.createIndex('remark', 'remark');
    console.log("数据库创建成功");
};

// 如果数据库打开失败
DBOpenRequest.onerror = function (event) {
    logError('数据库打开失败');
};
// 如果数据库打开成功
DBOpenRequest.onsuccess = function (event) {
    db = DBOpenRequest.result;
    // 存储数据结果
    console.log("indexedDB数据库连接成功" + db);
};


//定义一个全局变量
window.method = {
    // 添加数据
    add: function (newItem) {
        var transaction = db.transaction([dbName], "readwrite");
        // 打开已经存储的数据对象
        var objectStore = transaction.objectStore(dbName);
        // 添加到数据对象中
        var objectStoreRequest = objectStore.add(newItem);
        objectStoreRequest.onsuccess = function (event) {
            console.log('数据新增成功！')
        };
    },
    // 更新数据
    update: function (id, data) {
        // 编辑数据
        var transaction = db.transaction([dbName], "readwrite");
        // 打开已经存储的数据对象
        var objectStore = transaction.objectStore(dbName);
        // 获取存储的对应键的存储对象
        var objectStoreRequest = objectStore.get(id);
        // 获取成功后替换当前数据
        objectStoreRequest.onsuccess = function (event) {
            // 当前数据
            var myRecord = objectStoreRequest.result;
            // 遍历替换
            for (var key in data) {
                if (typeof myRecord[key] != 'undefined') {
                    myRecord[key] = data[key];
                }
            }
            // 更新数据库存储数据
            objectStore.put(myRecord);
        };
    },
    // 删除数据
    del: function (id) {
        // 打开已经存储的数据对象
        var objectStore = db.transaction([dbName], "readwrite").objectStore(dbName);
        // 直接删除
        var objectStoreRequest = objectStore.delete(id);
        // 删除成功后
    },
    // 通过主键key单个记录数据,主键是前面开始设置的相应key值
    get: function (key) {
        var transaction = db.transaction([dbName], "readwrite");
        var store = transaction.objectStore(dbName);
        var request = store.get(key);
        request.onerror = function () {
            console.error('getDataByKey error');
        };
        request.onsuccess = function (e) {
            var result = e.target.result;
            console.log('查找数据成功')
            console.log(result);
        };
    },
    // 遍历数据表
    cursor: function () {
        var transaction = db.transaction([dbName], "readwrite");
        var store = transaction.objectStore(dbName);
        var request = store.openCursor();//打开游标
        var arr = [];
        //此方法是异步的,所以return的方式无用，只能使用全局变量的方式或传js的方式
        request.onsuccess = function (e) {
            var cursor = e.target.result;
            if (cursor) {
                arr.push(cursor.value);
                cursor.continue();
            }
            content = JSON.stringify(arr);
            console.log("db:"+getJsonLength(JSON.parse(content)));
        };
    }
};
// }
// sessionStorage.setItem("isIndexedDBOnload", 1);
//获取json数组的长度
function getJsonLength(jsonData){
    var jsonLength = 0;
    for(var item in jsonData){
        jsonLength++;
    }
    return jsonLength;
}